package juego;


import org.w3c.dom.Node;

import principal.Constantes;

import juego.enums.tipoMovimiento;

import basicas.Posicion;

public class AlgoTank extends Tanque implements IDestruible, IMovil/*, KeyPressedObservador */{

	public AlgoTank(Node n) {
		super(n);
	}
	
	public AlgoTank(Posicion posicionInicial) {
		super(posicionInicial);						
		setDireccion(tipoMovimiento.arriba);
		this.setVelocidadMovimiento(Constantes.VELOCIDAD_INICIAL_ALGOTANK);
		this.setTiempoRecarga(Constantes.TIEMPO_RECARGA_INICIAL_ALGOTANK);
		this.setResistencia(Constantes.RESISTENCIA_INICIAL_ALGOTANK);
	}
	
	/*public void keyPressed(KeyEvent event) {
		tipoMovimiento nuevaDireccion = null;
		
		if (this.getMovimientosRestantes() <= 0) {
			switch (event.getKeyCode()) {
				case KeyEvent.VK_UP: nuevaDireccion = tipoMovimiento.arriba; break;			
				case KeyEvent.VK_DOWN: nuevaDireccion = tipoMovimiento.abajo; break;
				case KeyEvent.VK_LEFT: nuevaDireccion = tipoMovimiento.izquierda; break;
				case KeyEvent.VK_RIGHT: nuevaDireccion = tipoMovimiento.derecha; break;
				case KeyEvent.VK_SPACE: disparar(); break;
			}
			if (nuevaDireccion != null) { 
				if (nuevaDireccion != getDireccion()) {
					setDireccion(nuevaDireccion);
				} else {	
					if (puedoMover(nuevaDireccion)) {
						mover(nuevaDireccion);
					}
				}
			}
				
		}
	}
	*/
	public void vivir() {
		super.vivir();
		if (this.getMovimientosRestantes() > 0) {
			this.avanzar();
		} else {			
			this.centrar();			
		}		
	}
	
	public int getPuntos() {
		return 0;
	}

	public void efectoBonusVida() {
		setResistencia((int)(getResistencia() * Constantes.EFECTO_BONUS_VIDA));
	}

	public void efectoBonusAtaque() {
		double nuevaVelocidad = getVelocidadMovimiento() * Constantes.EFECTO_BONUS_VELOCIDAD_MOVIMIENTO;
		int nuevoTiempoRecarga = (int)(getTiempoRecarga() / Constantes.EFECTO_BONUS_VELOCIDAD_DISPARO);
		
		if (nuevaVelocidad < Constantes.MAXIMA_VELOCIDAD_MOVIMIENTO)
			this.setVelocidadMovimiento(nuevaVelocidad);
		if (nuevoTiempoRecarga > Constantes.MINIMO_TIEMPO_RECARGA)
			this.setTiempoRecarga(nuevoTiempoRecarga);
	}	

	public void morir() {
		super.morir();		
		getNivel().gameOver();
	}
}
